'''
1.导入socket
2.创建socket套接字
3.绑定发送端ip和端口号（端口号也会自动分配）
4.等待接收数据
5.关闭套接字
'''

# 1.导入socket 
from socket import *
# 2.创建socket套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)

# 添加以下配置避免端口号被占用
udp_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, True)

# 3.绑定接收端ip和端口号（端口号也会自动分配）
udp_socket.bind(("", 8888))
# 4.等待接收数据
# 代码就会阻塞到这里，直到收到数据会自动释放阻塞
# 参数：缓冲区大小，一次最多接收1024个字节的数据
# 返回值
# 元素1：数据的字节数据、
# 元素2：发送者的IP和端口的元组(ip, port)
(recieve_data, addr) = udp_socket.recvfrom(1024) 
# 解析发送端发送的数据，使用try函数
try:
    message = recieve_data.decode(encoding="utf-8")
except Exception as e:
    message = recieve_data.decode(encoding="GBK")
    
print("接收到的数据：", message)
# 5.关闭套接
udp_socket.close()